<?php
namespace app\friend\loglic;

class Form
{
    /**
    * 生成友链内容模型表单
    * @version 1.5.2 首次引入
    * @param string $action 必需;管理操作名（index|create|edit）;默认：index
    * @param array $data 可选;初始数据;默认：空
    * @return array 标准的呆错表单组件格式（二维数组）
    */
    public function addon($data=[])
    {
        //查询表单字段
        $fields = model('common/Field','loglic')->forms([
            'module'   => 'friend',
            'controll' => 'detail',
            'action'   => DcEmpty($data['info_action'],'index'),
        ]);
        //合并初始字段（index|create|edit）
        if($data['action'] == 'index'){
            $orderMax = reset(DcArraySequence($fields,'order'))['order'];
            $fields = array_merge($fields,[
                'info_sort' => [
                    'order'           => 2,
                    'data-visible'    => true,
                    'data-title'      => lang('friend_sort'),
                    'data-formatter'  => 'sort',
                ],
                'info_status_text' => [
                    'order'           => $orderMax+1,
                    'data-title'      => lang('status'),
                    'data-visible'    => true,
                ],
                'info_create_time' => [
                    'order'           => $orderMax+2,
                    'data-visible'    => true,
                    'data-sortable'   => true,
                    
                ],
                'info_update_time' => [
                    'order'           => $orderMax+3,
                    'data-visible'    => true,
                    'data-sortable'   => true,
                ],
            ]);
        }
        //初始化字段参数
        $fields = array_map(function($field){
            //$field['form-order'] = 1;
            if(isset($field['title'])){
                $field['title'] = lang($field['title']);
            }
            if(!isset($field['class_left'])){
               $field['class_left'] = 'col-12'; 
            }
            if(!isset($field['class_right'])){
               $field['class_right'] = 'col-12'; 
            }
            return $field;
        },$fields);
        //初始化默认值
        $fields = DcFields(DcArrayEmpty($fields), $data);
        //初始化表单格式
        return DcFormItems($fields);
    }
    
    /**
    * 生成前台发布表单
    * @version 1.5.2 首次引入
    * @param string $action 必需;操作名;默认：index
    * @param array $data 可选;初始数据;默认：空
    * @return array 标准的呆错表单组件格式（二维数组）
    */
    public function publish($action='index', $data=[])
    {
        //查询表单字段
        $fields = model('common/Field','loglic')->forms([
            'module'   => 'friend',
            'controll' => 'publish',
            'action'   => $action,
        ]);
        //初始化字段参数
        $fields = array_map(function($field){
            if(isset($field['title'])){
                $field['title'] = lang($field['title']);
            }
            if(!isset($field['class_left'])){
               $field['class_left'] = 'col-12'; 
            }
            if(!isset($field['class_right'])){
               $field['class_right'] = 'col-12'; 
            }
            if($field['type'] == 'captcha'){
                if( !DcBool(config('common.site_captcha')) ){
                    unset($field);
                }
            }
            return $field;
        },$fields);
        //初始化默认值
        $fields = DcFields(DcArrayEmpty($fields), $data);
        //初始化表单格式
        return DcFormItems($fields);
    }
    
    /**
    * 获取内容模型的表单字段列表(包括初始字段)
    * @version 1.5.2 首次引入
    * @param string $controll 必需;控制器名;默认：publish
    * @param string $action 必需;操作名;默认：index
    * @return array 表单数组列表
    */
    public function keys($controll='publish',$action='action')
    {
        return array_unique(model('common/Field','loglic')->forms([
            'module'   => 'friend',
            'controll' => $controll,
            'action'   => $action,
        ],'keys'));
    }
    
    /**
    * 获取模型的扩展字段列表
    * @version 1.5.2 首次引入
    * @param string $controll 必需;控制器名;默认：publish
    * @param string $action 必需;操作名;默认：index
    * @return array 表单数组列表
    */
    public function metaKeys($controll='publish',$action='action')
    {
        return array_diff($this->keys($controll,$action),['info_id','info_name','info_slug','info_excerpt','info_content','info_password','info_create_time','info_update_time','info_parent','info_order','info_user_id','info_type','info_mime_type','info_status','info_comment_status','info_comment_count','info_views','info_hits','info_module','info_controll','info_action','info_title','info_keywords','info_description']);
    }
}